package main

func reverseBits(num int) int {
	if num == 0 {
		return 1
	}
	if num < 0 {
        // 32 位的 2 的补码，2^32
        num = 1<<32 + num
    }
	var arr []int // arr[i] > 0 表示连续1的个数， arr[i]==0 表示这里有个0
	cnt1 := 0
	for num != 0 {
		bit := num & 1
		num = num >> 1
		if bit == 1 {
			cnt1++
		} else {
			if cnt1 > 0 {
				arr = append(arr, cnt1)
				cnt1 = 0
			}
			arr = append(arr, 0)
		}
	}
	if cnt1 > 0 {
		arr = append(arr, cnt1)
	}
	arr = append(arr, 0) // 补一个前导0
	max := 0
	for i, v := range arr {
		if v == 0 {
			cnt := 1
			if i > 0 {
				prev := arr[i-1]
				cnt += prev
			}
			if i+1 < len(arr) {
				after := arr[i+1]
				cnt += after
			}
			if cnt > max {
				max = cnt
			}
		}
	}
	if max > 32 {
		max = 32
	}
	return max
}

func main() {
	println(reverseBits(-1))
}
